<?php
/**
 * Created by PhpStorm.
 * User: allen_ios
 * Date: 16/11/24
 * Time: 下午3:12
 */

/**
 * 执行计划任务程序的主调方法
 * @params array $commandArgv 命令行参数
 */
function runCron($commandArgv)
{
    if (!isset($commandArgv[1])) {
        exit("class's param is missing");
    }

    if (!isset($commandArgv[2])) {
        exit("method's param is missing");
    }

    //判断类是否存在
    $classNameStr = $commandArgv[1];
    if (false === strpos($classNameStr,'.')) {
        $class = '\\Task\\App\\' . $classNameStr;
    } else {
        $classNameArr = explode('.',$classNameStr);
        $class = '\\Task\\App\\'.$classNameArr[0].'\\'.$classNameArr[1];
    }
    $class = ucfirst($class);
    if (!class_exists($class)) {
        exit("class {$class} is not exists \n");
    }

    //判断类中的方法是否存在
    $execObj = new $class();
    $func = $commandArgv[2];
    if (!method_exists($execObj, $func)) {
        exit("method {$func} is not exists \n");
    }

    //设置方法的参数
    $params = array();
    foreach ($commandArgv as $key => $param) {
        if ($key > 2) { //将参数设置到数组中去
            $params[] = $param;
        }
    }

    //执行类中的方法
    call_user_func_array(array($execObj, $func), $params);
}

/**
 *
 * print_r输出
 * @param mixed $value 值
 * @param string $title 显示值前面的标题
 */
function cprint($value, $isEnd = false)
{
    echo '<pre>';
    print_r($value);
    echo '</pre>';

    if ($isEnd) {
        exit();
    }
}

/**
 *
 * var_dump输出
 * @param mixed $value 值
 * @param string $title 显示值前面的标题
 */
function cdump($value, $isEnd = false)
{
    var_dump($value);

    if ($isEnd) {
        exit();
    }
}


/**
 *
 * 获取和设置配置变量
 * @param string $name 配置项的名字
 * @param string|array $value 配置项的值
 */
function config($name = "", $value = null)
{
    static $_config = array();

    //如果没参数，就取全部配置数据
    if (empty($name)) {
        if (!empty($value)) {
            $_config = array_merge($_config, array_change_key_case($value));
        }
        return $_config;
    }

    // 避免非法参数
    if (!is_string($name)) {
        return null;
    }

    if (!strpos($name, '.')) {
        $name = strtolower($name);
        if (is_null($value)) {
            return isset($_config[$name]) ? $_config[$name] : null;
        }
        $_config[$name] = $value;
        return;
    }


    // 二维数组设置和获取支持
    $name = explode('.', $name);
    $name[0] = strtolower($name[0]);
    if (is_null($value)) {
        return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null;
    }
    $_config[$name[0]][$name[1]] = $value;
    return;
}

/**
 * 往日志文件中写日志
 * @param string $data  写入的数据
 * @param string $dirName 目录名称 只需写目录名称不需要完整的路径
 */
function wLog($msgData, $dirName = '')
{
    if (LOG_WRITE == false) {
        return;
    }

    //自定义的log日志路径
    $dirName = $dirName ? $dirName . '/' : '';
    if (!is_dir(LOG_PATH . $dirName)) {
        mkdir(LOG_PATH . $dirName, 0777, true);
    }
    $lastDirName = LOG_PATH . $dirName . date('y-m-d') . '.log';
    $now = date('Y-m-d H:i:s');

    //将信息写入到日志中去
    error_log("{$now} log_info: {$msgData}\r\n", 3, $lastDirName,'');
}